package atividade;

import java.util.List;

import dominio.ativacao.especializacao.FuncaoSinal;
import dominio.neuronio.especializacao.NeuronioPerceptron;
import dominio.padrao.Padrao;
import dominio.redeneural.RedeNeural;
import dominio.redeneural.especializacao.FeedForward;

import util.PatternFileParser;
import util.Util;

/**
 * @author Paulo Vitor
 * @author Roberto Su
 * 
 * @description
 *
 */
public class Atividade6 {
	
	/**
	 * @param args
	 */
	public static void main( String[] args ) {
		
		String[] nomePadroes = new String[]{
			"zero","um","dois","tres","quatro","seis","ponto","nove"	
		};

		//pega os padroes de treinamento do arquivo
		List<Padrao> padroesTreinamento = PatternFileParser.getPadroesTreinamento("chars", 8, 120);
		
		int i = 0 ;
		for( Padrao padrao : padroesTreinamento ) {
			padrao.setDescricao( nomePadroes[i++] );
			//System.out.println(padrao);
		}		
		
		//saidas desejadas por padrao
		double[][] dy = new double[][]{
			{  1, -1, -1, -1, -1, -1, -1, -1 },
			{ -1,  1, -1, -1, -1, -1, -1, -1 },
			{ -1, -1,  1, -1, -1, -1, -1, -1 },
			{ -1, -1, -1,  1, -1, -1, -1, -1 },
			{ -1, -1, -1, -1,  1, -1, -1, -1 },
			{ -1, -1, -1, -1, -1,  1, -1, -1 },
			{ -1, -1, -1, -1, -1, -1,  1, -1 },
			{ -1, -1, -1, -1, -1, -1, -1,  1 }};
		
		//cria a estrutura da rede neural
		RedeNeural rna = new FeedForward();
		rna.criarCamadaNeural( padroesTreinamento.size(), NeuronioPerceptron.class, new FuncaoSinal() );
		
		//treina a rede, adequando os pesos
		rna.treinarRedePerceptron( padroesTreinamento, dy );
	
		//testa o perceptron com todos os padrões
		for(Padrao padrao : padroesTreinamento){
			Util.imprimirVetor( rna.estimularRedeNeural( padrao ) );	
		}
		
		/*double[][] sete = new double[][]{
				{-1,1,1,1,1,1,1,1,1,1,1,-1},
				{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1},
				{-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1},
				{-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1},
				{-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1},
				{-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1},
				{-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1},
				{-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1},
				{-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1},
				{-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
		};
		
		Util.imprimirVetor( rna.estimularRedeNeural( new Padrao(sete) ) );*/
		
	}
	
}
